import * as echarts from "echarts";
// 导入所有的echarts插件
const _all_ec_plugInUnit = import.meta.glob("./ec_all_tool/**/*.js", {eager: true})

/**
 * @description: 更新echarts图表功能
 * @author: 王琛
 * @Date: 2022-11-25 16:45:45
 * @param {*}
 * @return {*}
 */
function upDataEc({config = {}, ec = null, upName = ['series'], getOptions = null} = {}) {
    // 如果没有ec对象则
    if (!ec) {
        console.error("你当前有更新ec对象数据,但是没有监听到传入的对象")
        return;
    }
    // 获取所有的配置信息
    const options = getOptions(config);
    // 需要更新的配置
    let needUpOptions = {};
    // 根据更新名称字段收集需要更新的配置
    for (let i = 0, len = upName.length; i < len; i++) {
        const key = upName[i];
        needUpOptions[key] = options[key];
    }
    ;
    // 开始更新数据
    ec.myChart.setOption(needUpOptions);
}

/**
 * @description: 根据type自动的导入使用那个ec图表的插件
 * @author: 王琛
 * @Date: 2023-03-08 15:31:10
 * @param {*}
 * @return {*}
 */
export class createEc {
    // 当亲的ec对象
    myChart = null;
    // ec模型抛出的所有方法
    ec_module_fn = {}
    // 当前的配置信息
    options = {}
    // 更新图表函数
    upData = ({config, ec, upName}) => upDataEc({config, ec, upName, getOptions: this.ec_module_fn.getOptions})
    
    constructor({type, el, config}) {
        try {
            // 获取当前使用的是那个ec类型
            const _ec_module = _all_ec_plugInUnit[`./ec_all_tool/${type}.js`];
            console.log('%c日志-152524', 'color:#fff;fontSize:15px;background:#993366;padding:2px 5px;border-radius:6px', _ec_module);
            if (_ec_module) {
                // 记录当前模型暴露的方法
                this.ec_module_fn = _ec_module;
                // 记录当前创建的配置
                this.options = _ec_module.getOptions({...config});
                // 初始化echarts
                this.myChart = echarts.init(el);
                // 渲染数据
                this.myChart.setOption(this.options);
                return this;
            } else {
                throw new Error("没有获取到type类型的ec模块")
            }
        } catch (e) {
            throw e;
        }
        
    }
}